package lc13;

import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author Stringzhua
 * @Date 2024/5/28 18:54
 * description:
 * 罗马数字转整数
 * I可以放在V(5) 和X(10) 的左边，来表示 4 和 9。
 * X可以放在L(50) 和C(100) 的左边，来表示 40 和90。
 * C可以放在D(500) 和M(1000) 的左边，来表示400 和900。
 */
public class test03 {
    @Test
    public void main() {
        String x = "MCMXCIV";
        System.out.println(romanToInt(x));
    }

    public int romanToInt(String s) {
        //1.定义规则
        Map<String, Integer> map = new HashMap<>();
        map.put("I", 1);
        map.put("V", 5);
        map.put("X", 10);
        map.put("L", 50);
        map.put("C", 100);
        map.put("D", 500);
        map.put("M", 1000);
        map.put("IV", 4);
        map.put("IX", 9);
        map.put("XL", 40);
        map.put("XC", 90);
        map.put("CD", 400);
        map.put("CM", 900);
        //2.解析规则
        int[] result = new int[s.length()];
        int index = 0;
        for (int i = 0; i < s.length(); i++) {
            String v1 = s.charAt(i) + "";
            String v2 = null;
            if (i < s.length() - 1) {
                v2 = "" + s.charAt(i) + s.charAt(i + 1);
            }
            if (v2 != null && map.containsKey(v2)) {
                result[index++] = map.get(v2);
                i++;
                continue;
            }
            if (map.containsKey(v1)) {
                result[index++] = map.get(v1);
            }
        }
        //3.计算结果
        int resInt = 0;
        for (int i = 0; i < result.length; i++) {
            resInt+=result[i];
        }

        return resInt;
    }
}
